home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Tools / freeWAIS-sf-1.1 / ui / question.c < prev    next >
C/C++ Source or Header  |  1994-08-04  |  7KB  |  256 lines

  1. /* 
  2.   WIDE AREA INFORMATION SERVER SOFTWARE:
  3.    No guarantees or restrictions.  See the readme file for the full standard
  4.    disclaimer.
  5.  
  6.    This is part of the shell user-interface tools for the WAIS software.
  7.    Do with it as you please.
  8.  
  9.    jonathan@Think.COM
  10. */
  11.  
  12. /* Copyright (c) CNIDR (see ../COPYRIGHT) */
  13.  
  14. /*
  15.  * $Log: question.c,v $
  16.  * Revision 1.2  1994/08/05  07:30:12  pfeifer
  17.  * Release beta 04
  18.  *
  19.  * Revision 1.1  93/06/23  20:02:16  warnock
  20.  * Initial revision
  21.  * 
  22.  * Revision 1.1  1993/02/16  15:09:27  freewais
  23.  * Initial revision
  24.  *
  25.  * Revision 1.4  92/03/17  14:38:24  jonathan
  26.  * Rename from qread.  This is more like source.c now.  For use with X
  27.  * interface.
  28.  * 
  29.  */
  30.  
  31. #ifndef lint
  32. static char *RCSid = "$Header: /usr/local/ls6/src+data/src/freeWAIS-sf/ui/RCS/question.c,v 1.2 1994/08/05 07:30:12 pfeifer Exp $";
  33. #endif
  34.  
  35. #define _C_QREAD
  36.  
  37. #include "wais.h"
  38. #include "globals.h"
  39.  
  40. short readRect(question, file)
  41. Question question;
  42. FILE *file;
  43. {
  44.   char temp_string[MAX_SYMBOL_SIZE];
  45.   short check_result;
  46.   long left, right, top, bottom;
  47.  
  48.   check_result = CheckStartOfStruct("rect", file);
  49.   if(FALSE == check_result){ 
  50.     return(false);
  51.   }
  52.   if(END_OF_STRUCT_OR_LIST == check_result)
  53.     {
  54.       return(FALSE);
  55.     }
  56.     
  57.   /* read the slots: */
  58.   while(TRUE){
  59.     short check_result = ReadSymbol(temp_string, file, MAX_SYMBOL_SIZE);
  60.     if(END_OF_STRUCT_OR_LIST == check_result) break;
  61.     if(FALSE == check_result){
  62.       return(false);
  63.     } 
  64.     if(0 == strcmp(temp_string, ":left")) {
  65.       if (FALSE == ReadLong(file, &left))
  66.     return(false);
  67.     }
  68.     else if(0 == strcmp(temp_string, ":right")) {
  69.       if (FALSE == ReadLong(file, &right))
  70.     return(false);
  71.     }
  72.     else if(0 == strcmp(temp_string, ":top")) {
  73.       if (FALSE == ReadLong(file, &top))
  74.     return(false);
  75.     }
  76.     else if(0 == strcmp(temp_string, ":bottom")) {
  77.       if (FALSE == ReadLong(file, &bottom))
  78.     return(false);
  79.     }
  80.     else
  81.       SkipObject(file);
  82.   }
  83.   return(TRUE);
  84. }
  85.  
  86. short ReadQuestion(question, file)
  87. Question question;
  88. FILE *file;
  89. {
  90.   char temp_string[5000];
  91.   short check_result;
  92.  
  93.   long version;
  94.  
  95.   /* make sure it's a question */
  96.   
  97.   check_result = CheckStartOfStruct("question", file);
  98.   if(FALSE == check_result){ 
  99.     return(false);
  100.   }
  101.   if(END_OF_STRUCT_OR_LIST == check_result)
  102.     {
  103.       return(FALSE);
  104.     }
  105.     
  106.   /* clear stuff */
  107.   freeSourceList(question->Sources);
  108.   question->Sources = NULL;
  109.  
  110.   freeDocList(question->RelevantDocuments);
  111.   question->RelevantDocuments = NULL;
  112.  
  113.   freeDocList(question->ResultDocuments);
  114.   question->ResultDocuments = NULL;
  115.  
  116.   strcpy(question->keywords, "");
  117.  
  118.   /* read the slots: */
  119.   while(TRUE){
  120.     short check_result = ReadSymbol(temp_string, file, MAX_SYMBOL_SIZE);
  121.     if(END_OF_STRUCT_OR_LIST == check_result) break;
  122.     if(FALSE == check_result){
  123.       return(false);
  124.     } 
  125.  
  126. #ifdef DEBUG
  127.     fprintf(stderr, "Question slot: '%s'\n", temp_string); /* for debugging */
  128. #endif
  129.  
  130.     if(0 == strcmp(temp_string, ":version")) {
  131.       if(FALSE == ReadLong(file, &version))
  132.     return(false);
  133.       question->version = (short)version;
  134.     }
  135.     else if(0 == strcmp(temp_string, ":sort-results-by")) {
  136.       SkipObject(file);
  137.     }
  138.     else if(0 == strcmp(temp_string, ":window-geometry")) {
  139.       SkipObject(file);
  140.     }
  141.     else if(0 == strcmp(temp_string, ":seed-words")) {
  142.       if(FALSE == ReadString(temp_string, file, 5000))
  143.     return(false);
  144.       strcpy(question->keywords, temp_string);
  145.     }
  146.     else if(0 == strcmp(temp_string, ":seed-words-used")) {
  147.       if(FALSE == ReadString(temp_string, file, 5000))
  148.     return(false);
  149.       question->keywords_used = s_strdup(temp_string);
  150.     }
  151.     else if(0 == strcmp(temp_string, ":relevant-documents")) {
  152.       freeDocList(question->RelevantDocuments);
  153.       question->RelevantDocuments = ReadListOfDocuments(file);
  154.     }
  155.     else if(0 == strcmp(temp_string, ":sourcepath")) {
  156.       if(FALSE == ReadString(temp_string, file, 5000))
  157.     return(false);
  158.       if(question->sourcepath != NULL) s_free(question->sourcepath);
  159.       question->sourcepath = s_strdup(temp_string);
  160.     }
  161.     else if(0 == strcmp(temp_string, ":sources")) {
  162.       freeSourceList(question->Sources);
  163.       question->Sources = ReadListOfSources(file);
  164.     }
  165.     else if(0 == strcmp(temp_string, ":result-documents")) {
  166.       freeDocList(question->ResultDocuments);
  167.       question->ResultDocuments = ReadListOfDocuments(file);
  168.     }
  169.     else if(0 == strcmp(temp_string, ":maximum-results")) {
  170.       if(!ReadLong(file, (long*)&question->maxresdocs)) return(FALSE);
  171.     }
  172.     else
  173.       SkipObject(file);
  174.   }
  175.  
  176.   return(TRUE);
  177. }
  178.  
  179. void WriteQuestionfp(fp, question)
  180. FILE *fp;
  181. Question question;
  182. {
  183.   DocList doc;
  184.   SourceList sources;
  185.  
  186.   WriteNewline(fp);
  187.   WriteStartOfStruct("question", fp);
  188.   WriteNewline(fp);
  189.   WriteSymbol(":version", fp);
  190.   WriteLong(2, fp);
  191.   WriteNewline(fp);
  192.   WriteSymbol(":seed-words", fp);
  193.   WriteString(question->keywords, fp);
  194.   WriteNewline(fp);
  195.   if(question->keywords_used != NULL) {
  196.     WriteSymbol(":seed-words-used", fp);
  197.     WriteString(question->keywords_used, fp);
  198.     WriteNewline(fp);
  199.   }
  200.   WriteSymbol(":relevant-documents", fp);
  201.   WriteNewline(fp);
  202.   WriteStartOfList(fp);
  203.   for(doc = question->RelevantDocuments; doc != NULL; doc = doc->nextDoc)
  204.     WriteDocument(doc->thisDoc, fp);
  205.   WriteEndOfList(fp);
  206.   WriteNewline(fp);
  207.   WriteSymbol(":sourcepath", fp);
  208.   WriteString(question->sourcepath, fp);
  209.   WriteNewline(fp);
  210.   WriteSymbol(":sources", fp);
  211.   WriteNewline(fp);
  212.   WriteStartOfList(fp);
  213.   for(sources = question->Sources; sources != NULL; sources = sources->nextSource) {
  214.     WriteStartOfStruct("source-id", fp);
  215.     WriteNewline(fp);
  216.     WriteSymbol(":filename", fp);
  217.     WriteString(sources->thisSource->filename, fp);
  218.     WriteNewline(fp);
  219.     WriteEndOfStruct(fp);
  220.   }
  221.   WriteNewline(fp);
  222.   WriteEndOfList(fp);
  223.   WriteNewline(fp);
  224.   WriteSymbol(":maximum-results", fp);
  225.   WriteLong(question->maxresdocs, fp);
  226.   WriteNewline(fp);
  227.   WriteSymbol(":result-documents", fp);
  228.   WriteNewline(fp);
  229.   WriteStartOfList(fp);
  230.   for(doc = question->ResultDocuments; doc != NULL; doc = doc->nextDoc)
  231.     WriteDocument(doc->thisDoc, fp);
  232.   WriteEndOfList(fp);
  233.   WriteNewline(fp);
  234.   WriteEndOfList(fp);
  235. }
  236.  
  237. void WriteQuestion(filename, question)
  238. char *filename;
  239. Question question;
  240. {
  241.   FILE *fp;
  242.  
  243.   /* test to see if it exists */
  244.  
  245.   if ((fp = fopen(filename, "w")) == NULL) {
  246.     char outstring[STRINGSIZE];
  247.     sprintf(outstring, "Error opening %s.\n", filename);
  248.     PrintStatus(STATUS_URGENT, STATUS_HIGH,outstring);
  249.     return;
  250.   }
  251.   
  252.   WriteQuestionfp(fp, question);
  253.   fclose(fp);
  254.   question->modified = FALSE;
  255. }
  256.